package com.tyros.resource.modules.file.service;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.tyros.common.service.IBaseService;
import com.tyros.resource.constant.DataSourceConst;
import com.tyros.resource.modules.file.dto.FileDTO;
import com.tyros.resource.modules.file.entity.FileEntity;

/**
 * 资源文件接口
 *
 * @author zhangshuaiyin
 * @since 1.0.0 2022-02-19
 */
public interface FileService extends IBaseService<FileDTO, FileEntity> {

    /**
     * 判断是否文件是否已经保存
     *
     * @param fileDTO 唯一条件
     * @return 文件对象
     */
    FileDTO getUniqueRecord(FileDTO fileDTO);

    /**
     * 根据openId查询文件实体
     *
     * @param openId openId
     * @return 文件信息
     */
    FileDTO getByOpenId(String openId);

    /**
     * 逻辑删除
     *
     * @param file 文件信息
     */
    void logicDelete(FileDTO file);

    /**
     * 逻辑删除恢复
     *
     * @param file 文件信息
     */
    void logicInsert(FileDTO file);

    /**
     * 唯一记录条件构造器
     *
     * @param fileDTO 条件实体
     * @return 唯一记录条件构造器
     */
    default LambdaQueryWrapper<FileEntity> uniqueWrapper(FileDTO fileDTO) {
        return Wrappers.<FileEntity>lambdaQuery()
                .eq(FileEntity::getStorageType, fileDTO.getStorageType())
                .eq(FileEntity::getMd5, fileDTO.getMd5())
                .eq(FileEntity::getSha256, fileDTO.getSha256())
                .eq(FileEntity::getOriginalName, fileDTO.getOriginalName())
                ;
    }

    /**
     * openId 条件构造器
     *
     * @param openId openId
     * @return openId对应记录
     */
    default LambdaQueryWrapper<FileEntity> queryWrapper(String openId) {
        return Wrappers.<FileEntity>lambdaQuery()
                .eq(FileEntity::getOpenId, openId)
                .eq(FileEntity::getDeleted, DataSourceConst.NON_DELETED)
                ;
    }
}
